From: Steven Smith Date: Tue, 31 Oct 2006 11:44:28 +0000 (+0000) Subject: [XEN] Add a warning to the i8259 if we generate spurious IRQs. Tidy up X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15567^2~170 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22man:///%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22man:/?a=commitdiff_plain;h=80cc85d4374d4cebc6aad26a717b6674eb5f34ac;p=xen.git [XEN] Add a warning to the i8259 if we generate spurious IRQs. Tidy up a little while I'm here. Signed-off-by: Steven Smith --- diff --git a/xen/arch/x86/hvm/i8259.c b/xen/arch/x86/hvm/i8259.c index 7cf96f4b57..470b9e70c1 100644 --- a/xen/arch/x86/hvm/i8259.c +++ b/xen/arch/x86/hvm/i8259.c @@ -210,7 +210,7 @@ static inline void pic_intack(PicState *s, int irq) s->irr &= ~(1 << irq); } -int pic_read_irq(struct hvm_virpic *s) +static int pic_read_irq(struct hvm_virpic *s) { int irq, irq2, intno; unsigned long flags; @@ -225,6 +225,7 @@ int pic_read_irq(struct hvm_virpic *s) pic_intack(&s->pics[1], irq2); } else { /* spurious IRQ on slave controller */ + gdprintk(XENLOG_WARNING, "Spurious irq on slave i8259.\n"); irq2 = 7; } intno = s->pics[1].irq_base + irq2; @@ -236,10 +237,11 @@ int pic_read_irq(struct hvm_virpic *s) /* spurious IRQ on host controller */ irq = 7; intno = s->pics[0].irq_base + irq; + gdprintk(XENLOG_WARNING, "Spurious irq on master i8259.\n"); } pic_update_irq(s); spin_unlock_irqrestore(&s->lock, flags); - + return intno; } @@ -430,24 +432,6 @@ static uint32_t pic_ioport_read(void *opaque, uint32_t addr1) return ret; } -/* memory mapped interrupt status */ -/* XXX: may be the same than pic_read_rq() */ -uint32_t pic_intack_read(struct hvm_virpic *s) -{ - int ret; - unsigned long flags; - - spin_lock_irqsave(&s->lock, flags); - ret = pic_poll_read(&s->pics[0], 0x00); - if (ret == 2) - ret = pic_poll_read(&s->pics[1], 0x80) + 8; - /* Prepare for ISR read */ - s->pics[0].read_reg_select = 1; - spin_unlock_irqrestore(&s->lock, flags); - - return ret; -} - static void elcr_ioport_write(void *opaque, uint32_t addr, uint32_t val) { PicState *s = opaque; diff --git a/xen/include/asm-x86/hvm/vpic.h b/xen/include/asm-x86/hvm/vpic.h index 8e2d386e59..67f229f04a 100644 --- a/xen/include/asm-x86/hvm/vpic.h +++ b/xen/include/asm-x86/hvm/vpic.h @@ -70,9 +70,7 @@ void pic_set_irq_new(void *opaque, int irq, int level); void pic_init(struct hvm_virpic *s, void (*irq_request)(void *, int), void *irq_request_opaque); -int pic_read_irq(struct hvm_virpic *s); void pic_update_irq(struct hvm_virpic *s); /* Caller must hold s->lock */ -uint32_t pic_intack_read(struct hvm_virpic *s); void register_pic_io_hook (void); int cpu_get_pic_interrupt(struct vcpu *v, int *type); int is_periodic_irq(struct vcpu *v, int irq, int type);